home *** CD-ROM | disk | FTP | other *** search
/ Chip 1996 April / CHIP 1996 aprilis (CD06).zip / CHIP_CD06.ISO / hypertxt.arj / 92 / PDS.CD < prev    next >
Text File  |  1995-09-14  |  28KB  |  507 lines

  1.       @VJobb késôn mint soha@N
  2.  
  3.       @VMicrosoft C/C++ PDS 7.0@N
  4.  
  5.           A  konkurenciánál  jó   másfél  évvel  késôbb,   most  a
  6.       Microsoft is kínál fejlesztôi csomagot a C++-ban programozók
  7.       számára. Kíváncsiak voltunk, hogy megérte-e várakozni.
  8.           A  Microsoft cég  C PDS-e  mindig is  a  professzionális
  9.       szoftverfejlesztôk    legkedveltebb    segédeszközei    közé
  10.       tartozott.   Tavaly    azonban   a    konkurencia   alaposan
  11.       megszorongatta  a  Microsoft   termékét:  míg  a   Microsoft
  12.       megmaradt a klasszikus C compilernél, addig a többi  gyártó,
  13.       például   a   Borland   és   a   Zortech   már   régen    az
  14.       objektumorientált  C++-technológiát  kínálták.  A  C/C++ PDS
  15.       7.0-val most a Microsoft is belépett az objektumok világába.
  16.           A  compiler  front-end kibôvítése  C-rôl  C++-ra nem  az
  17.       egyetlen  újítás  a  C/C++  PDS  7.0-ban.  A  debuggertôl  a
  18.       workbenchig szinte mindent továbbfejlesztettek. Ezenkívül az
  19.       új rendszerbe beépítették  a Windows számára  készült eddigi
  20.       Software  Development  Kit-et  (SDK)  és  a  Windows 3.1-hez
  21.       készült Application Program Interface-t (API).
  22.           A  Microsoft szemmel  láthatóan sok  munkát fektetett  a
  23.       C/C++ PDS-be.  Az új  rendszer szuperlatívuszok  egész sorát
  24.       vonultatja fel:
  25.       -- több  mint  száz  fejlesztô  dolgozott  az  elkészítésén;
  26.       --  a  rendszer  tömörített  formában  tizenegy floppylemezt
  27.       foglal el. A teljes telepítéshez (beleértve a súgószövegeket
  28.       és a példaprogramokat) kis  híján 30 Mbyte-ra van  szükség a
  29.       merevlemezen.  A több  mint ötezer  oldalas dokumentáció  jó
  30.       tizenkét kilogrammot nyom;
  31.       --  a  compiler   csak  386SX   vagy  efeletti   processzorú
  32.       gépeken futtatható. Aki  a C/C++ PDS-sel  szeretne dolgozni,
  33.       annak legalább egy 4 Mbyte memóriájú 386SX géppel és egy  80
  34.       Mbyte-os merevlemezzel  kell rendelkeznie.  Míg a  programot
  35.       lehetséges   ugyan   (de  nem   túl   bölcs  dolog)   kisebb
  36.       merevlemezen (40-80  Mbyte) használni,  addig a  386-os vagy
  37.       486-os  CPU  nem  takarítható  meg.  Ennek  oka  a  32 bites
  38.       compiler,  amely  16  bites gépeken  már  nem  futtatható. A
  39.       286-osok,  mint   fejlesztôi  gépek   ezáltal  végérvényesen
  40.       elvesztették szerepüket.
  41.           Az eddigi C PDS-sel ellentétben a C/C++ PDS két telepítô
  42.       programmal rendelkezik. Az  elsô lényegében megfelel  annak,
  43.       amit a fejlesztôk a 6.0-os rendszerbôl ismernek: DOS  alatti
  44.       telepítés -- funkcionális, de nem túl kényelmes. îgy azonban
  45.       csak egy tiszta  DOS-környezetet lehet kiépíteni  a compiler
  46.       számára.
  47.           A teljes rendszer  merevlemezre viteléhez szükség  van a
  48.       második,  a  Windows  által  támogatott  telepítô programra,
  49.       amely kényelmesebb,  mint a  DOS-változat. Aki  ismeri az új
  50.       Quick C  for Windows-t,  annak bizonyára  ismerôsnek tûnik a
  51.       telepítés. A két telepítô segédeszköz megegyezik a  lényeges
  52.       pontokban.  A   telepítô  program   Windows-változatával  is
  53.       létrehozható  egy  tiszta  DOS-változat.  Ha  a   merevlemez
  54.       kapacitása  lehetôvé  teszi,   akkor  azonban  ajánlatos   a
  55.       rendszert mind DOS-, mind Windows-változatban kiépíteni.
  56.  
  57.  
  58.       @VTelepítési segítség kezdôk számára@N
  59.  
  60.           A   rendszer   egy   párbeszéddobozban   konfigurálható.
  61.       Választani   lehet   négy   különbözô   memóriamodell,  négy
  62.       célrendszer (DOS, WINDOWS.EXE,  WINDOWS.DLL és QUICKWIN)  és
  63.       három különbözô lebegôpontos könyvtár közül. Ehhez jön még a
  64.       példaprogramok, a forrásfile-ok  és a DOS  grafikai könyvtár
  65.       telepítésének lehetôsége.  A programozó  tehát valóban  nagy
  66.       kínálatból állíthatja össze saját rendszerét.
  67.           A kezdôk  rendszerint nem  tudnak mit  kezdeni az  ilyen
  68.       nagy  kínálattal.  Honnan  tudnánk,  hogy  mi  mindenre lesz
  69.       szükségünk,  mielôtt még  ismernénk a  rendszert. Ezért  egy
  70.       alapkiépítésû rendszert is telepíthetünk. Ha a PDS-sel  való
  71.       munka során mégis szükség lenne egyik vagy másik könyvtárra,
  72.       akkor az bármikor létrehozható anélkül, hogy ezért a  teljes
  73.       telepítést elölrôl kellene kezdeni.
  74.           A  válogatás  közben  a  telepítô  program  folyamatosan
  75.       kiszámítja  az  összeállított rendszer  méretét,  s jelzi  a
  76.       célmeghajtón szabadon maradó terület méretét is.
  77.           A telepítô  program kihasználja  a Windows  multitasking
  78.       lehetôségeit. Mialatt  a másolás  és kicsomagolás  folyik, a
  79.       türelmetlen   fejlesztô   már   belekóstolhat   a  ""readme"
  80.       file-okba. A floppyk cseréje sem vonja el a figyelmét, mivel
  81.       azokat csak  egyszer kell  behelyezni sorban  egymás után. A
  82.       Microsoft végre figyelembe  vette a Winword  telepítését ért
  83.       kritikákat.
  84.           A rendszer telepítéséhez 15--30 Mbyte szabad hely kell a
  85.       merevlemezen. Ennek  oroszlánrészét a  könyvtárak használják
  86.       fel. Teljes telepítéskor pusztán ezek 14 Mbyte-ot  foglalnak
  87.       el. Ehhez jön a header  file-ok 1 Mbyte-ja. A compiler  és a
  88.       segédeszközök   további   8   Mbyte-ot   foglalnak   el.   A
  89.       súgórendszerhez jó 4 Mbyte-ra  van szükség. Aki példákat  és
  90.       forrásszövegeket is telepít (ami ajánlatos), annak még bô  2
  91.       Mbyte-ot kell feláldoznia.
  92.           A teljes  fejlesztôi rendszer  központja, akár  az elôzô
  93.       változatban, a ""Programmer's Workbench" (PWB -- programozói
  94.       munkapad). A PWB  ezúttal is tiszta  DOS-alkalmazás. Windows
  95.       alatt csak a  DOS-boxban használható. Sok  fejlesztô vágyát,
  96.       hogy a C/C++ compiler valódi Windows-környezetben legyen,  a
  97.       Microsoft  még  az  idén  be  akarja  teljesíteni.  A 3.1-es
  98.       Windows-változattal  így   lehetôség  lesz   a  Programmer's
  99.       Workbench Windows-ablakon  belüli futtatására  anélkül, hogy
  100.       le   kellene   mondani  az   egérrôl.   Addig  sajnos   csak
  101.       alternatívák vannak: PWB ablakban vagy PWB egérhasználattal.
  102.           Az eddigi PWB (1.10 verzió) lényeges ismertetôjele  volt
  103.       a   szinte   már   közmondásos   komótossága   (DOS  alatti)
  104.       programváltás esetén.
  105.  
  106.  
  107.       @VFejlesztési ciklus egy másodperc alatt@N
  108.  
  109.           Programozói  körökben  ezért  rosszallóan ""Programmer's
  110.       Waitbench"-nek  is  nevezték.  A  fô  probléma  a  programok
  111.       tesztelése és a hibakeresés  volt. A régi verzióval  még egy
  112.       486-oson is néhány másodpercig tart egy program elindítása a
  113.       Workbench-bôl. Még  több idô  telik el,  mire a  Workbench a
  114.       program lefutása után újra munkára készen áll.
  115.           Ebben a vonatkozásban történt egy s más az új PWB-ben. A
  116.       teljes ciklus lefutása (indítás-visszatérés) egy gyors gépen
  117.       már  csak egy  szûk másodpercet  igényel. îgy  most  tényleg
  118.       hatékonyan lehet dolgozni, ami jó, mivel a hosszú ciklusidôk
  119.       miatt a  legtöbb fejlesztô  egyáltalán nem  használta a régi
  120.       Workbench-et.   A  PWB   lehetôségei  így   kihasználatlanul
  121.       maradtak.
  122.           A    Workbench-be    be   van    építve    a   Microsoft
  123.       forrásböngészôje  (Source   Browser).  A   böngészôk  tágabb
  124.       értelemben  CASE   (Computer  Aided   Software  Engineering)
  125.       segédeszközök. A kódgeneráló CASE eszközökkel, mint  például
  126.       a   Quick  C   for  Windows-ból   való  Quick   Case   W-vel
  127.       összehasonlítva  a  böngészôket  más  célra  szánták.  Nem a
  128.       forrásszövegek   elkészítésére,   hanem   azok    elemzésére
  129.       szolgálnak. E segédeszközöket  évekig szinte csak  Smalltalk
  130.       környezetekben használták.
  131.           A Microsoft C programozói már a PDS 6.0-os verziója  óta
  132.       ismerik  a   Browsert.  A   C++  világába   való  belépéssel
  133.       lényegesen megnôtt a Browser jelentôsége.
  134.  
  135.  
  136.       @VTovábbfejlesztett editor@N
  137.  
  138.           Mivel    a     böngészôket    éppen     a    terjedelmes
  139.       osztálykönyvtárak esetén érdemes használni, ezért jelentôsen
  140.       tovább  kellett  fejleszteni  a  régi,  függvényorientált  C
  141.       Browsert. Az  új Browser  már nemcsak  függvényhívásokat tud
  142.       elemezni, hanem osztályhierarchiákat is.
  143.           Már  PWB  1.10-nek  is   egyik  nagy  erôssége  volt   a
  144.       bôvíthetôség. A hagyományos editorokkal ellentétben, amelyek
  145.       csak makrók  segítségével bôvíthetôk,  a PWB-t  C függvények
  146.       használatával is hozzá lehet szabni az egyéni igényekhez.  E
  147.       C függvények nem a megszokott startup kódokat  tartalmazzák.
  148.       Indításkor ehelyett a PWB tölti be és inicializálja ôket.
  149.           A PWB legtöbb belsô  funkcióját a C bôvítésekbôl  is meg
  150.       lehet hívni. Ez nagymértékû rugalmasságot enged meg,  aminek
  151.       azonban megvan  az ára:  aki teljesen  ki akarja  meríteni a
  152.       Workbench eme lehetôségét, annak néhány órát rá kell szánnia
  153.       a kézikönyv tanulmányozására.
  154.           A  PWB  C  függvényekkel  való  kibôvítésének lehetôsége
  155.       elsôsorban  azokat  a  professzionális  fejlesztôket célozza
  156.       meg,  akik  nap  mint  nap  használják  a  Workbench-et.   A
  157.       hobby-programozók számára  vélhetôen elegendôk  a makrók.  A
  158.       már  teljesen   beépített  funkciókon   kívül  ugyanis   még
  159.       nagyszámú    makro    áll    rendelkezésre,    amelyeket   a
  160.       felhasználónak   már   csak  a   kívánt   billentyûhöz  kell
  161.       kapcsolnia.  Az  1.10-es  verzióhoz  képest  további  újítás
  162.       lelhetô  fel a  környezeti változóknál.  Most mindegyiket  a
  163.       Workbench-bôl  lehet  létrehozni  és  manipulálni.   Ezáltal
  164.       feloldódik a  LIB, az  INCLUDE és  a HELP  korlátozott köre.
  165.       Sajnos  a   megváltozott  rendszerkörnyezet   nem  tárolódik
  166.       automatikusan a projekt-adatoknál.
  167.           A  Workbench  megjelenô  képe  összességében kellemesebb
  168.       lett.  A legfontosabb  újítás ezen  a területen  az  egymást
  169.       átfedô  ablakok. A  Workbench ebben  végre elérte  a  kornak
  170.       megfelelô  szintet.  Az ablakok  száma  fölöttébb nagyvonalú
  171.       módon maximálisan 16 lehet.
  172.           Aki a C compiler  6.0-os verziójából és az  SDK-ból álló
  173.       kombinációval Windows-programok tesztelését és hibakeresését
  174.       akarta  elvégezni,   annak  lényegében   egy  dologra   volt
  175.       szüksége: türelemre.  A C  PDS 6.0  Workbench-e ráadásul nem
  176.       képes     Windows-programokat     elindítani.     Ezért    a
  177.       Windows-fejlesztôknek  kerülô  úton, mindig  a  Windows File
  178.       Manager-éhez  kellett  fordulniuk.  A   Windows-alkalmazások
  179.       tesztelése elég idegölô volt.
  180.           A probléma kiküszöbölésére a C/C++ PDS 7.0 tartalmaz egy
  181.       kis segédeszközt, amelynek  neve WX-szerver. A  WX-szerver a
  182.       Windows  alatt indítható,  és azt  figyeli, hogy  valamelyik
  183.       DOS-boxban történik-e  kísérlet Windows-program  indítására.
  184.       Ha  igen,  akkor  a  WX-szerver  közbelép,  és  elindítja  a
  185.       programot.  E  megoldással  most  már  a   Windows-programok
  186.       (különösképpen a Codeview for Windows) közvetlenül a PWB-bôl
  187.       indíthatók. Ezáltal  a PWB  valamelyest közelebb  került egy
  188.       Windows fejlesztôi környezet funkcionális lehetôségeihez.
  189.           A C/C++ rendszer két compilerbôl áll, egy a C, egy pedig
  190.       a  C++  programok  számára.  Mindkét  compiler  ugyanazt   a
  191.       kódgenerátort   használja.   Az  új   compilerek   32  bites
  192.       flat-model programok, ami magával von néhány következményt:
  193.           --   a   gazdagép   teljes   memóriája   a    compilerek
  194.       rendelkezésére áll. Sok olyan korlátozás, ami megnehezítette
  195.       a C 6.0A compilerrel végzett munkát, így megszûnt, vagy  más
  196.       területekre tolódott el.  Ez elsôsorban a  globális optimáló
  197.       számára  jelent  elônyt,  amelynek  eddig  mintegy  száz sor
  198.       hosszúságú függvények esetén be kellett vonnia vitorláit.  A
  199.       32  bites  compiler  több mint  ezer  soros  függvényeket is
  200.       könnyen optimál;
  201.           -- a 32 bites flat-model programok futtatásához  szükség
  202.       van   egy  DPMI-szerverre   (DPMI  =   DOS  Protected   Mode
  203.       Interface). E feladatot vagy a Windows látja el, hiszen  van
  204.       saját,   beépített   DPMI-szervere,   vagy   a   mellékelten
  205.       szállított  386Max  DPMI-szerver.  Azonban  a  védett   módú
  206.       szolgáltatások is a  CPU idejét foglalják  le, tehát a  DPMI
  207.       használatakor  kissé csökken  a teljesítmény.  Cserébe a  32
  208.       bites utasítások olyan hatalmas  elônyöket adnak, hogy a  32
  209.       bites  flat  memóriamodellre  való  átállás  kétségtelenül a
  210.       helyes irányba mutat.
  211.  
  212.  
  213.       @VMost még jobb az optimálás@N
  214.  
  215.           A  kódgenerátor  mindig  is  a  Microsoft  C  compilerek
  216.       erôssége   volt.   E  hagyományhoz   méltó   az  új   verzió
  217.       kódgenerátora is. Az MSC 6.0A compilerhez képest a  lényeges
  218.       továbbfejlesztések az automatikus vagy explicit inlining  és
  219.       a globális optimálás területén történtek.
  220.           Az explicit inlining technikát  már tervbe vették a  C++
  221.       nyelvi  szabványában.  Az  inline-nak  nevezett függvényeket
  222.       minden  meghívásnál  közvetlenül  a  kódba  ültetik.  îgy az
  223.       egyébként   szükséges   belépési   és   kilépési   kódrészek
  224.       feleslegessé válnak.
  225.           Kisebb függvények esetén elôfordulhat, hogy ezek a kódok
  226.       teszik ki a  végrehajtáshoz szükséges idô  nagyobbik részét.
  227.       Az  inline függvények  tehát bizonyos  mértékig a  makróknak
  228.       felelnek meg. Mivel a makrók kockázatosak, ezért az explicit
  229.       inlining technika komoly továbbfejlesztés.
  230.           Egy  lépéssel  elôrébb  van  az  automatikus   inlining.
  231.       Ilyenkor a compiler maga dönti el, hogy közvetlenül a  kódot
  232.       használja fel, vagy meghívja a függvényt.
  233.           Még  mélyebbre  ható   optimálások  teszik  lehetôvé   a
  234.       compiler számára, hogy  minél tökéletesebb kódokat  állítson
  235.       elô.  A  C  6.0A compilere  mindig  csak  egyes függvényeket
  236.       tudott optimálni. E határok most kitolódtak.
  237.           Azonban nem szabad azt elfelejtenünk, hogy már a C  6.0A
  238.       compiler is igen magas szintû volt. Már a C 6.0A is alaposan
  239.       kiütötte a nyeregbôl a konkurens Borlandot és Zortechet,  és
  240.       a  Watcom  compiler sem  tudott  lényeges elônyöket  elérni.
  241.       Erôsen a lefordított programtól függ, hogy az új optimálások
  242.       a gyakorlatban valóban lényegesen megnövelik-e a sebességet.
  243.       Sebességre szabott forráskód esetén  már a C 6.0A  is nagyon
  244.       jó kódokat állít elô.
  245.           Inkább azok  a programok  jelentenek problémát  a 6.0-os
  246.       compiler  számára,  amelyek  intenzíven  használják  a   kis
  247.       függvényeket.
  248.  
  249.  
  250.       @VOptimált benchmark@N
  251.  
  252.           Ilyenkor az új compilernek sokkal jobbak az  eredményei.
  253.       Lehetôvé  teszi  a  programok  megtisztítását  anélkül, hogy
  254.       csökkenne a teljesítmény.
  255.           Különösen a benchmark  programokkal bánik agresszíven  a
  256.       Microsoft compiler. Egyrészt a benchmarkok rendszerint  csak
  257.       kis   függvényeket   tartalmaznak.   Másrészt   sok  mûvelet
  258.       felesleges, illetve nincs messzeható következménye a program
  259.       számára,  így  a  compiler  egyáltalán  nem  állítja  elô  a
  260.       mûveletnek megfelelô kódot.
  261.           Különösen kirívó példa a Dhrystone régi, 1.1 verziója. A
  262.       C 6.0A egy 25 MHz-es  486DX gépen 20|000 dhrystone-t ér  el,
  263.       az új compiler pedig a mesébe illô 29|500-at. A gyakorlatban
  264.       igen  ritka  az  ilyen  nagyságrendû  javulás,  s  ha  mégis
  265.       megtörténik,   akkor   a   forrásszöveg   kifejezetten   kis
  266.       hatékonyságú   volt.   Valós  programoknál   a   futási  idô
  267.       legfeljebb  10--15  százalékkal javul.  A  kódminôség jobban
  268.       látszik   az    elôállított   kód    megtekintésekor,   mint
  269.       benchmarkokon keresztül (lásd a listát).
  270.           A  Microsoft  állítása  szerint  már  több  mint  öt éve
  271.       használja  az   összes  nagy   Microsoft  program   a  P-kód
  272.       technológiát (lásd kiemelt szövegünket). A Microsoft azonban
  273.       csak   most  bocsájtja   e  technikát   a  többi   fejlesztô
  274.       rendelkezésére. A P-kód használatával komoly tármegtakarítás
  275.       érhetô el.
  276.           Aki azt  remélte, hogy  a 7.0  verzió kódgenerátorával a
  277.       Microsoft végre  a 386-osok  speciális parancskészletét  (és
  278.       természetesen  a   bôvített  regisztereket)   is  ki   fogja
  279.       használni,   az   csalódik.   Most  is   a   286-os   kód  a
  280.       ""csúcsérzés".  Aki  többet szeretne,  annak  továbbra is  a
  281.       Watcom vagy  a Zortech  compilereihez kell  fordulnia. Ez  a
  282.       tény annál inkább meglepô, hiszen a Microsoft compiler  maga
  283.       is  egy 32  bites flat-model  program, amely  kihasználja  a
  284.       386-os és 486-os processzorok speciális lehetôségeit.
  285.           A   professzionális   szoftverfejlesztésben   nemcsak  a
  286.       végtermék  játszik  szerepet.   Tekintettel  kell  lenni   a
  287.       programozók idôráfordítására, hiszen messze ez a  legnagyobb
  288.       költségtényezô  (legalábbis   kisebb  szoftverházaknál).   A
  289.       Workbench mellett ezért a compiler is gyorsabb lett.
  290.           Ehhez  elsôsorban  két dolog  járul  hozzá. Egyrészt  az
  291.       elôre  lefordított   headereket  és   a  típusleíró   header
  292.       file-okat csak egyszer kell lefordítani. Ezután elôfordított
  293.       formában addig használhatók,  amíg nem változtatunk  rajtuk.
  294.       Tapasztalatok  szerint  viszonylag  ritkán  változnak  meg a
  295.       header file-ok az implementációs részekhez képest.
  296.           Másrészt   rendelkezésre  áll   egy  új   gyorsfordítási
  297.       lehetôség. Az eddigi @Kquick compile@N (/qc) opció már nincs meg
  298.       a C/C++ 7.0-ban, felváltotta  a @Kfast compile@N (/f)  opció. Az
  299.       új opcióval megszûnnek az eddigi eljárás komoly hátrányai:
  300.           -- nagy programokat nem lehetett a /qc-vel lefordítani;
  301.           -- a /qc nem fogadott el minden programszerkezetet. Mind
  302.       a C  mind a  C++ fordító  kielégíti az  ANSI szabványokat (a
  303.       C++-nál   az   ANSI   2.1-et).   Ezenkívül   vannak  további
  304.       Microsoftra jellemzô bôvítések,  amelyeket azonban ki  lehet
  305.       kapcsolni.
  306.           Már a compiler telepítésekor feltûnik, hogy az új  C/C++
  307.       PDS már nem támogatja az OS/2-t, ezt operációs rendszert nem
  308.       szánták sem  gazdagép- sem  célgép-rendszernek. A  Microsoft
  309.       ezt  azzal   indokolja,  hogy   minden  rendelkezésre   álló
  310.       fejlesztési  forrást már  befektettek a  Windowsba, mivel  a
  311.       piac  ezt  igényli.  Ráadásul  az  OS/2  éppen  egy áttörési
  312.       fázisban  van.  Az  OS/2 1.x  verzióinak  napjai  meg vannak
  313.       számlálva, a 2.0 verzió pedig csak nemrég jelent meg. Ami  a
  314.       jövôt illeti, a Microsoft nem zárja ki az OS/2 támogatásának
  315.       lehetôségét,  de  konkrétan  csupán  a  compiler  egy  olyan
  316.       változatát   jelentették   be,   amely   az   OS/2    1.x-et
  317.       gazdagép-rendszerként  használja.  Erre  nagy  szükség  van,
  318.       mivel sok fejlesztô dolgozik OS/2 1.x alatt.
  319.  
  320.  
  321.       @VKapcsolat a Windows 3.1-gyel@N
  322.  
  323.           Az     OS/2     1.x     számára     programokat      író
  324.       szoftverfejlesztôknek tehát  továbbra is  a C  6.0A-nál kell
  325.       maradniuk.
  326.           A Microsoft  az utolsó  pillanatban döntött  úgy, hogy a
  327.       Windows 3.1 API-t is beilleszti az új rendszerbe.  Vélhetôen
  328.       azoknak a kritikusoknak akarnak  elébe menni, akik már  most
  329.       is a PDS 7.1 verzióján  spekulálnak. îgy a C/C++ PDS  7.0 az
  330.       elsô olyan  fejlesztôi rendszer,  amely támogatja  a Windows
  331.       3.1-et.
  332.           Egy jó fejlesztôi rendszerhez manapság hozzátartoznak  a
  333.       nagyteljesítményû könyvtárak  is. Már  a C  6.0A is nyújtott
  334.       ilyesmiket  DOS  szinten.  A  Windows  világában  azonban  a
  335.       Borland utcahosszal vezetett. Az MSC-ben programozóknak  még
  336.       a Windows  SDK-val sem  volt többje  mint a  csupasz Windows
  337.       API.  A Borland  C++ felhasználói  ezzel szemben  támogatást
  338.       kapnak az OWL-tôl,  a Borland Object  Windows Library-jétôl.
  339.       Ez a  könyvtár leegyszerûsíti  a programozást  a Windowsban,
  340.       nagyon jól érvényesül az objektum-koncepció.
  341.           A  Microsoft  Foundation Class-okkal  és  a hozzátartozó
  342.       Application  Framework   Class-okkal  (AFX)   kevesebb  mint
  343.       harminc sor  megírásával lehet  létrehozni egyszerû  Windows
  344.       programokat. A klasszikus Windows API-val szemben ez  óriási
  345.       könnyebbséget jelent.
  346.           A Codeview  hibakeresônél is  történt egy  s más.  A C++
  347.       által   megkívánt,   kötelezô   bôvítéseken   kívül  további
  348.       tökéletesítésekre is sor került. A legtöbb fejlesztô számára
  349.       a  legérdekesebb  újítás  valószínûleg  a  Remote  Debugging
  350.       (távoli hibakeresés) soros  vonalon keresztül. îgy  megszûnt
  351.       az egyik  hátrány a  Turbo Debuggerhez  képest. A hibakeresô
  352.       kezelése   nagy    vonalakban   ugyanaz    maradt,   úgyhogy
  353.       valószínûleg sok  programozó továbbra  is a  Turbo Debuggert
  354.       használja majd.
  355.  
  356.  
  357.       @VNagy programokat egyszerû kifejleszteni@N
  358.  
  359.           A  C  PDS  6.0 szemmel  látható  gyenge  pontja volt  az
  360.       overlay-kezelés. Például nem volt lehetett adatokat  tartani
  361.       overlay-kben.  A  lemezre   való  kimentésért  kizárólag   a
  362.       programozó felelt.
  363.           A  modulorientált  overlay-koncepció  is  sok  problémát
  364.       jelentett  a C  6.0A-ban. Az  eddigi overlay-managerrel  nem
  365.       lehetett   a    nagy   programokat    kizárólag   logikailag
  366.       struktúrálni,     állandóan     figyelni     kellett      az
  367.       overlay-struktúrára.
  368.           A problémák megoldására  a Microsoft kitalálta  a MOVE-t
  369.       (Microsoft  Overlay  Virtual   Environment).  Ezzel  az   új
  370.       overlay-kezelôvel sokkal  kicsiszoltabban lehet  overlay-ket
  371.       alkalmazni: a kód és  az adatok is lehetnek  overlay-kben; a
  372.       különbözô   overlay-kben    lévô   függvények    kölcsönösen
  373.       meghívhatják egymást; az overlay-ket egy @Klast recently  used@N
  374.       algoritmus koordinálja. Rövidebbek az elérési idôk.
  375.  
  376.  
  377.       @VIntegrálva van a Windows 3.1@N
  378.  
  379.           A Windowsban  való programozás  számára nem  elégséges a
  380.       compiler  és  a  könyvtárak.  Windows  programok  írásához a
  381.       fejlesztônek  további   eszközökre  van   szüksége,  például
  382.       párbeszéd- és ikon-editorokra.
  383.           A C PDS  C 6.0A-ból éppúgy  hiányoztak ezek az  eszközök
  384.       mint  a   Windows  header   file-ok.  Ezek   a  Windows  SDK
  385.       alkotórészei  voltak.  Miután a  Microsoft  C/C++ PDS  7.0-e
  386.       rendelkezésre  bocsájtja  a Windows  interface-eket,  ezek a
  387.       segédeszközök természetesen már  nem hiányozhatnak. A  C 7.0
  388.       már tartalmazza a  Windows 3.1 hibakeresô  magját (Debugging
  389.       Kernel).
  390.           A  C/C++  PDS  7.0 körülbelül  1000  márkába  kerül. îgy
  391.       minimálisra csökkent a távolság a konkurens Borland  cégtôl.
  392.       A Borland C++ 3.0-nak tehát ki kell majd állnia a  közvetlen
  393.       összehasonlítást.  Aki  már  rendelkezik  egy  Microsoft   C
  394.       PDS-sel, az 300 márkáért átállhat az új verzióra.
  395.           Az új PDS jelentôs elôrelépés a régi C 6.0A  rendszerhez
  396.       képest.  A  C++  technológia  mellett  a  fejlesztô  kap egy
  397.       objektumorientált Windows SDK-t is,  amit már a Windows  3.1
  398.       számára  készítettek.  A  kódgenerátor  ismét  nagyot lépett
  399.       elôre  (még akkor  is, ha  még messze  nem tökéletes).  A  C
  400.       compilerek területén  a Microsoft  vezetô pozíciója  ezáltal
  401.       továbbra is biztosnak tûnik.
  402.           Feltétlenül szükséges volt a Workbench felgyorsítása. Az
  403.       új Workbench-csel végre hatékonyan lehet dolgozni. Azonban a
  404.       2.0  verzió  sem  igazán gyors,  e  területen  még mindig  a
  405.       Borland   van   elôrébb.   A   Workbench   rugalmassága   és
  406.       mindenekelôtt  a  kitûnô  Source  Browser  viszont  lényeges
  407.       pluszt jelentenek a PWB számára. A rendszert teljessé  teszi
  408.       a  Codeview  és  az  overlay-manager  tökéletesítése  és   a
  409.       fordítási sebesség növelése.
  410.           Végezetül kijelenthetjük, hogy érdemes volt várakozni. A
  411.       Microsoft C/C++  7.0-val szemben  a konkurenciának  biztosan
  412.       nem lesz könnyû dolga.
  413.  
  414.       @KChristoph Grunwald@N
  415.  
  416.  
  417.       @VA P-kód tömör@N
  418.  
  419.           A  P-kód a  magas szintû  nyelvek és  az assembly  nyelv
  420.       keveréke. A P-kód compiler  magas szintû nyelvbôl állít  elô
  421.       P-kódot. E keverékkódot azután egy interpreter hajtja végre.
  422.       A P-kód ezért gyorsabb  mint a szokásos magas  szintû nyelvi
  423.       interpreter, de sokkal lassabb mint a valódi gépi kód.
  424.           A  P-kód technikája  már viszonylag  régóta létezik.  Az
  425.       elmúlt években azonban feledésbe merült. A P-kód  rendszerek
  426.       virágkora  a hetvenes  évek vége,  a nyolcvanas  évek  eleje
  427.       volt. Ennek az idôszaknak a legjobban ismert P-kód compilere
  428.       az  UCSD-Pascal  volt.  A  P-kódot  akkoriban  elsôsorban  a
  429.       hordozhatóság növelése érdekében alkalmazták. Minden új  CPU
  430.       számára pusztán egy P-kód interpretert kellett megírni.  Egy
  431.       új kódgenerátor  megírásához képest  ez viszonylag  egyszerû
  432.       feladat. Ma már nem fontos ez a szempont. Az Intel  80x86-os
  433.       sorozattal  a  PC-világ  már  binárisan  kompatibilis  CPU-k
  434.       széles spektrumával rendelkezik.
  435.           Most  egy   másik  szempont   a  döntô,   nevezetesen  a
  436.       memóriaigény.  A Microsoft  P-kód interpreterének  mûveletei
  437.       igen hatásosak, egyetlen P-kód utasítás gyakran több  x86-os
  438.       utasítást is helyettesít. A legtöbb P-kód utasítás kizárólag
  439.       regiszterben lévô adatokkal dolgozik, így kiesik a  címzések
  440.       nagyrésze.  A  P-kód   technikával  összességében  akár   50
  441.       százalékos tármegtakarítás is  elérhetô. Ez az  érték persze
  442.       csak  nagy  programok esetén  érvényes,  mivel minden  P-kód
  443.       programnak  tartalmaznia  kell  az  interpretert.  Maga   az
  444.       interpreter körülbelül 6 Kbyte-os, a P-kód helyigénye  pedig
  445.       mintegy fele a natív  kódénak. A kisebb programok  tehát nem
  446.       nyernek a  P-kód technikából.  Gyors számolással  belátható,
  447.       hogy  a  P-kód értelmesen  csak  a legalább  12  Kbyte kódot
  448.       tartalmazó   programoknál   használható.   Ahhoz,   hogy  az
  449.       idôigényes feladatok végrehajthatók legyenek a gyors, x86-os
  450.       natív kódban, lehetséges a P-kód és a natív kód keverése.
  451.  
  452.  
  453.       @VPéldákkal teszteltük az optimálást@N
  454.  
  455.           Egy  fejlesztôi   segédeszköz  minôségét   legjobban  az
  456.       elôállított kódból  lehet leolvasni.  Emiatt több  listát is
  457.       készítettünk.
  458.           Az  1-es  listán  egy  olyan  program  látható, amellyel
  459.       komoly  problémái vannak  a C  6.0A compilernek.  Nem  képes
  460.       optimális  kódot  elôállítani,  mivel  az  összeadás  nem  a
  461.       main()-en  belül történik,  hanem egy  külön függvényben.  A
  462.       2-es lista a C 6.0A által elôállított kódot mutatja.
  463.           Egészen  más  az új  compiler.  Tökéletesen optimálta  a
  464.       programot. Ehhez számos mûvelet járul hozzá:
  465.           -- az add() automatikusan inline-olható;
  466.           -- a compiler már  a fordítás ideje alatt  kiszámolja az
  467.       összeadás  eredményét.  Ezáltal feleslegessé  válik  a helyi
  468.       változók elkészítése. A compiler nem is készíti el ôket;
  469.           --  az  add()  függvény  paramétereirôl  is  lemondhat a
  470.       compiler, mivel már egyetlen mûvelet sem történik;
  471.           -- mivel sem a  paraméterekre, sem a lokális  változókra
  472.       nincs  szükség,  a compiler  lemond  a veremkeretrôl  (stack
  473.       frame) is.
  474.           îgy   az   egész   program   a   printf()    meghívására
  475.       egyszerûsödik. Ezt már valóban nem lehet tovább optimálni. A
  476.       compiler teljes munkát végzett.
  477.           Az elsô  próba alapján  azt a  következtetést vonhatnánk
  478.       le, hogy a  C/C++ 7.0 tökéletesen  optimál. Sajnos nem  ez a
  479.       helyzet. A 4-es listán elôállított kód azt mutatja, hogy már
  480.       egy  kis átalakítás  a programban  elegendô ahhoz,  hogy  az
  481.       optimáló kiessen a koncepcióból. Az 1-es és 4-es lista  csak
  482.       abban  különböznek,  hogy  a  4-es  listában  a  TEST  típus
  483.       struktúraként van definiálva, míg az 1-es listában @Kint@N volt.
  484.       Azonban a struktúra is csak egyetlen @Kint@N típust tartalmaz, a
  485.       program jelentése  ugyanaz. A  4-es listában  az ideális kód
  486.       ezért pontosan az  lenne, amit a  compiler az 1-es  listából
  487.       generált.  Ehelyett  sokkal  rosszabb  minôségû  gépi   kódú
  488.       programot állít elô.
  489.           A következô pontok különösen szembetûnnek:
  490.           --  minden  lokális  változó  és  paraméter  a  el   van
  491.       helyezve,  noha  a  compiler az  @Ki3@N-at  és  a @Ktest@N-et  sosem
  492.       használja;
  493.           -- a paraméterek  átmásolódnak, noha az  inline függvény
  494.       éppolyan jól hozzáférhetne a main() lokális változóihoz;
  495.           -- az eredmény nincs kiszámolva a fordítási idô alatt.
  496.           A compiler  azonban ennél  a programnál  is végrehajtott
  497.       néhány optimálást:
  498.           -- Az összeadás eredménye az AX regiszterben  tárolódik,
  499.       mivel a compiler felismeri,  hogy a printf() meghívása  után
  500.       már nem lesz rá szükség;
  501.           -- a printf()-bôl való visszatérés után a vermet már nem
  502.       takarítja  ki, mivel  a következô  utasításban visszaáll  az
  503.       elôzô állapot. A compiler ezt észreveszi;
  504.           -- az add() függvény inline függvényként mûködik.
  505.           A  példa azt  mutatja, hogy  a C/C++  7.0  kódgenerátora
  506.       ugyan szép teljesítményt nyújt, de még messze nem tökéletes.
  507.